<template>
  <div class="school">
      <h2>学校名称：{{name}}</h2>
      <h2>学校地址：{{address}}</h2>
      <hr/>
  </div>
</template>

<script>
    // 引入消息发布与订阅第三方库，使用消息发布与订阅。
    import pubsub from 'pubsub-js'
    
    export default {
        name:'School',
        data(){
            return{ 
                name:'广西科技师范学院',
                address:'广西省 来宾市 兴宾区 铁北大道966号'
            }
        },
        methods:{
            // 订阅消息时，有两个参数，第一个固定必须接收（订阅消息名称msgName），第二个才是参数；
            helloSubscribe(msgName,data){
                console.log("hello消息发布了，消息的回调执行了",msgName,data);
            }
        },
        mounted(){
            // console.log('School',this);
            // 绑定自定义事件
            // this.$bus.$on('hello',(data) => {
            //     console.log("我是School组件，收到了数据",data);
            // })

            // 函数返回一个消息Id，可用于取消订阅；返回的Id放到this身上，以便于在实例销毁前函数中使用这个值；
            // 如果方法中第二个参数直接写回调方法（不在methods中写回调的情况下），要使用箭头函数，这样函数内this的指向才是vc（组件实例对象）
            this.pubId = pubsub.subscribe('hello' ,this.helloSubscribe)
        },
        // 实例销毁前
        beforeDestroy(){
            // 销毁前解绑组件自身定义的自定义事件（不用的时候就解绑，这样也不会影响全局事件总结（$bus）的使用）
            // this.$bus.off('hello');

            // 如果组件实例销毁前，根据消息订阅Id取消订阅
            pubsub.unsubcribe(this.pubId);
        }
    }
</script>

<style scoped>
    .school{
        background-color: skyblue;
        padding: 5px;
    }
</style>